//
//  StatusViewModel.swift
//  基于Swift的微博设计与实现
//
//  Created by 张源海 on 15/11/27.
//  Copyright © 2015年 张源海. All rights reserved.
//

import UIKit

/// 原创微博 Cell 的可重用表示符号
let StatusNormalCellId = "StatusNormalCellId"
/// 转发微博 Cell 的可重用标识符号
let StatusRetweetedCellId = "StatusRetweetedCellId"


/// w微博视图模型 (处理单条微博的业务逻辑)
class StatusViewModel: CustomStringConvertible  {

/// 微博模型
    var status: Status
    
//    /// 表格的可重用表示符号
//    var cellId: String {
//        return status.retweeted_status != nil ? StatusCellRetweetedId : StatusCellNormalId
//    }
    /// 是否转发微博
    var isRetweetedStatus: Bool {
        return status.retweeted_status != nil
    }
    
    /// 可重用标识符号
    var cellId: String {
        return isRetweetedStatus ? StatusRetweetedCellId : StatusNormalCellId
    }

    
//    /// 缓存的行高
//    lazy var rowHeight: CGFloat = {
//        
//        print("计算行高 \(self.status.text)")
//        
//        // 1. cell
//        let cell = StatusCell(style: .Default, reuseIdentifier: StatusCellNormalId)
//    
    /// 缓存的行高
    lazy var rowHeight: CGFloat = {
        var cell: StatusCell
        
        // 1. cell
        if self.isRetweetedStatus {
            cell = StatusRetweetedCell(style: .Default, reuseIdentifier: StatusRetweetedCellId)
        } else {
            cell = StatusNormalCell(style: .Default, reuseIdentifier: StatusNormalCellId)
        }
        // 2. 记录高度
        return cell.rowHeight(self)
    }()

    // MARK: - 计算型属性
    /// 用户头像地址
    var userProfileUrl: NSURL {
        return NSURL(string: status.user?.profile_image_url ?? "")!
    }
    /// 用户默认头像
    var userDefaultImage: UIImage {
        return UIImage(named: "avatar_default_big")!
    }
  
    
    
    /// 用户会员图标
    var userMemberImage: UIImage? {
        
        // 根据 mbrank 来生成图像
        if status.user?.mbrank > 0 && status.user?.mbrank < 7 {
            return UIImage(named: "common_icon_membership_level\(status.user!.mbrank)")
        }
        return nil
    }

    
    
    
    /// 用户认证图像 认证类型，-1：没有认证，0，认证用户，2,3,5: 企业认证，220: 达人
    var userVipImage: UIImage? {
        switch (status.user?.verified_type ?? -1) {
        case 0: return UIImage(named: "avatar_vip")
        case 2, 3, 5: return UIImage(named: "avatar_enterprise_vip")
        case 220: return UIImage(named: "avatar_grassroot")
        default: return nil
        }
    }
    
    /// 缩略图URL数组 - 存储型属性 !!!
    var thumbnailUrls: [NSURL]?
    
    var retweetedText: String? {
        
        // 1. 判断是否是转发微博，如果不是直接返回 nil
        guard let s = status.retweeted_status else {
            return nil
        }
        
//        print(s.pic_urls)
        
        // 2. s 就是转发微博
        return "@" + (s.user?.screen_name ?? "") + ":" + (s.text ?? "")
    }

    /// 构造函数
    init(status: Status) {
        self.status = status
        
        // 根据模型，来生成缩略图的数组
        if let urls = status.retweeted_status?.pic_urls ?? status.pic_urls {
            // 创建缩略图数组
            thumbnailUrls = [NSURL]()

            
//            // 遍历字典数组 -> 数组如果可选，不允许遍历，愿意：数组是通过下标来检索数据
//            for dict in status.pic_urls! {
//                
//                // 因为字典是按照 key 来取值，如果 key 错误，会返回 nil
//                let url = NSURL(string: dict["thumbnail_pic"]!)
//                
//                // 相信服务器返回的 url 字符串一定能够生成
//                thumbnailUrls?.append(url!)
            // 遍历字典数组
            for dict in urls {
                guard let url = NSURL(string: dict["thumbnail_pic"]!) else
                {
                    continue
                }
                
                thumbnailUrls?.append(url)
            }
        }
    }
    
    /// 描述信息
    var description: String {
        return status.description + "配图数组 \(thumbnailUrls ?? [] as NSArray)"
    }
}

